当前位置:  开发笔记 > 编程语言 > 正文

这里需要`std :: move`吗?

如何解决《这里需要`std::move`吗?》经验,为你挑选了2个好方法。

std::move在以下片段中是否有必要?

std::function my_std_function;

void call(std::function&& other_function)
{
  my_std_function.swap(std::move(other_function));
}

据我所知call()接受一个右值引用..但由于右值引用本身就是一个左值,为了调用swap(std::function&&)我必须将它重新转换为右值引用std::move

我的推理是正确的还是std::move在这种情况下可以省略(如果可以,为什么?)



1> Nicol Bolas..:

std::function::swap不通过右值参考获取其参数.它只是一个常规的非const左值参考.因此std::move无益(并且可能不应该编译,因为不允许rvalue引用绑定到非const左值引用).

other_function 也不需要是右值参考.



2> Jarod42..:

签名是

void std::function::swap( function& other )

所以代码不应该编译std::move(msvc有扩展名允许这种绑定:/)

当你采用r值引用时,我认为在你的情况下你想要的是一个简单的赋值:

std::function my_std_function;

void call(std::function&& other_function)
{
  my_std_function = std::move(other_function); // Move here to avoid copy
}


@Dean这种魔力包括仅仅通过安装将非常快的计算机变成热塑料块吗?
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有